package service;

import controladoresJpa.DicionarioMERJpaController;
import controladoresJpa.exceptions.NonexistentEntityException;
import controladoresJpa.exceptions.PreexistingEntityException;
import java.io.Serializable;
import java.util.Iterator;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import model.DicionarioMER;

/**
 * Módulo MER
 * Essa classe representa os Dicionarios de Dados Conceitual.
 * @author Eduardo, Maylon e Kamilla
 */
public class DicionarioMERService implements Serializable{
	
       private DicionarioMERJpaController jpa;

       /**
        * Método construtor da classe  DicionarioMERService
        */
        public DicionarioMERService() {
            jpa = new DicionarioMERJpaController();
        }   
        
        /**
         * Método responsável por salvar e atualizar um dicionário de dados do Modelo Entidade-Relacionamento.
         * @param atributoMER nome do atributo.
         * @throws NonexistentEntityException
         * @throws Exception exceção.
         */
        public void salvar(DicionarioMER dicionarioMER) {
                 if(dicionarioMER.getId()==-1){
                     dicionarioMER.setId(null);
            try {
                jpa.create(dicionarioMER);
            } catch (PreexistingEntityException ex) {
                Logger.getLogger(DicionarioMERService.class.getName()).log(Level.SEVERE, null, ex);
            } catch (Exception ex) {
                Logger.getLogger(DicionarioMERService.class.getName()).log(Level.SEVERE, null, ex);
            }
                     
                 }
                 else
                     try {
            jpa.edit(dicionarioMER);
        } catch (NonexistentEntityException ex) {
            Logger.getLogger(DicionarioMERService.class.getName()).log(Level.SEVERE, null, ex);
        } catch (Exception ex) {
            Logger.getLogger(DicionarioMERService.class.getName()).log(Level.SEVERE, null, ex);
        }
        }

         /**
         * Método responsável por excluir um Dicionario do Modelo Entidade-Relacionamento.
         * Ao excluir um dicionario todas as relacionamentos que ele possui serão excluídos.
         * @param dicionarioMER dicionário a ser excluído.
         * @throws NonexistentEntityException
         */
         public void excluir(DicionarioMER dicionarioMER) {
            if(this.encontrado(dicionarioMER))
                try {
            jpa.destroy(dicionarioMER.getId());
        } catch (NonexistentEntityException ex) {
            Logger.getLogger(DicionarioMERService.class.getName()).log(Level.SEVERE, null, ex);
        } 
            
         }

        /**
          * Método responsável por buscar todos os dicionários salvos.
          * @return lista de dicionários.
          */
         public List<DicionarioMER> listar() {
            return jpa.findDicionarioMEREntities();
         }

    

        /**
         * Método responsável por verificar se um determinaddo dicionário esta salvo.
         * @param dicionarioMER elemento a ser buscado
         * @return true quando encotrado, false quando não seja encotrado
         */
        public boolean encontrado(DicionarioMER dicionarioMER){
            List lst = this.listar();
            Iterator i = lst.iterator();
            boolean achei = false;
            while(!achei && i.hasNext()){
                DicionarioMER a = (DicionarioMER) i.next();
                if(dicionarioMER.getId().equals(a.getId()))
                    return true;
            }
            return false;
        }
        
        
       public DicionarioMER recuperarDoBancoDados(DicionarioMER objeto){
            List lst = jpa.findDicionarioMEREntities();
            Iterator i = lst.iterator();
            boolean achei = false;
            while(!achei && i.hasNext()){
                DicionarioMER a = (DicionarioMER) i.next();
                if(objeto.getId().equals(a.getId()))
                    return a;
            }
            return null;
        }
    
}
           
